This invention relates generally to computer software, and in particular to a programming framework that integrates multiple programming models at the language level.
Enterprise applications are typically built using a collection of different programming models and languages. The integration of a number of different programming models and languages is a significant task in the development process. In fact, developing large-scale enterprise applications has largely become an exercise in plugging together existing software components rather than writing low-level program code or models for individual components. Since many of the components in enterprise applications live in different domains and are written in different programming languages using different libraries, building enterprise applications requires designers to overcome the programming language barrier and to translate the programming models from one domain to another.
The use of different programming models and languages beneficially allows developers to select the most appropriate tools for a particular problem domain (e.g., SQL for database management, or Java for user interfaces). However, this also results in a collection of “design” times that are executed using a set of corresponding containers or runtimes. As a result, each programming model or language and its corresponding runtime becomes a distinct silo, each silo having its own tightly integrated tool set. With many different models and languages and the corresponding different runtimes, the software may suffer from problems such as semantic mismatches and the failure of languages and models to work well together.
During the design of the software, the complications that arise from the use of multiple tools and models for different parts of the application may manifest in the form of significantly lower developer efficiency and increased cost of development. Developers end up serving as the glue between these languages and models, and a lot of programming time and other design effort may be spent on translating between the different layers and models in the software (e.g., reading SQL data into the business logic and constructing user interface and generating reports from the results of the business logic).
During runtime of the software, the disparate silos may cause a lack of runtime optimization. As mentioned, different containers may be used to run different models and languages (such as SQL databases to execute SQL, or analytical servers for analytics). Each container is typically optimized for specialized language, but the interoperation of containers at runtime and the overall optimization of the software are ignored. This causes significant landscape complexity and increases the costs of running the application.
In existing programming models, one portion of an application's code (e.g., a silo) may use the functionality of another portion by calling on predefined functions that are written in a different programming model or language. To call functions that are written in another programming language, for example, a program may make a specific call to an API or function from a predefined library. This method of integrating code written in different silos is clunky and inefficient. It requires the program to pass data across the silos as variables to the desired function calls, and it adds a set of function calls that the programmer must learn in addition to the programming language itself.
Accordingly, a new programming framework is needed for dealing with these issues in the development of software applications that incorporate multiple programming models and/or languages, such as large-scale enterprise applications. It would be desirable for the new framework to maintain the autonomy of the different programming models and languages, while capturing these differences in a platform that seamlessly integrates the different models and languages at language level.